#!/bin/bash

# 进入项目目录
cd "$(dirname "$0")"

# 停止服务函数
stop_service() {
  # 使用简单的PID文件路径
  PID_FILE="app.pid"
  
  if [ -f "$PID_FILE" ]; then
    PID=$(cat "$PID_FILE")
    if ps -p $PID > /dev/null; then
      echo "停止服务进程: $PID"
      kill $PID
      sleep 1
      # 检查进程是否成功停止
      if ps -p $PID > /dev/null; then
        echo "强制停止进程: $PID"
        kill -9 $PID
        sleep 1
      fi
      echo "服务已停止"
    else
      echo "未找到运行中的进程，清理PID文件"
    fi
    rm -f "$PID_FILE"
  else
    echo "未找到PID文件，可能服务未运行"
  fi
  exit 0
}

# 启动服务函数
start_service() {
  # 检查是否有旧进程正在运行
  PID_FILE="app.pid"
  if [ -f "$PID_FILE" ]; then
    PID=$(cat "$PID_FILE")
    if ps -p $PID > /dev/null; then
      echo "检测到现有运行进程: $PID"
      echo "请先停止现有服务或使用停止命令: $0 stop"
      exit 1
    else
      echo "清理无效PID文件"
      rm -f "$PID_FILE"
    fi
  fi

  # 激活虚拟环境
  echo "激活虚拟环境..."
  if [ -f "venv/bin/activate" ]; then
    source venv/bin/activate
    echo "虚拟环境激活成功"
  else
    echo "错误：未找到虚拟环境，创建虚拟环境..."
    python3 -m venv venv
    source venv/bin/activate
    echo "虚拟环境创建并激活成功"
  fi

  # 安装依赖
  echo "安装依赖..."
  pip install -r requirements.txt

  # 设置环境变量
  export FLASK_ENV=production

  # 启动Gunicorn服务器
  echo "启动短信验证服务..."
  gunicorn -w 4 -b 0.0.0.0:8091 "src.wsgi:application" --daemon --pid "$PID_FILE" --log-file "gunicorn.log"

  # 等待进程启动
  sleep 2

  # 检查启动状态
  if [ -f "$PID_FILE" ]; then
    PID=$(cat "$PID_FILE")
    if ps -p $PID > /dev/null; then
      echo "短信验证服务已成功启动，进程ID: $PID"
      echo "可通过NGINX访问服务"
    else
      echo "服务启动失败，请检查日志文件: gunicorn.log"
    fi
  else
    echo "服务启动失败，无法创建PID文件"
  fi
}

# 根据参数执行相应操作
if [ "$1" = "stop" ]; then
  stop_service
else
  start_service
fi